package main

import (
	"flag"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"sort"
)

func main() {
	// 解析命令行参数
	sourceDir := flag.String("dir", ".", "源目录路径")
	targetFile := flag.String("output", "merged.md", "输出文件路径")
	recursive := flag.Bool("recursive", true, "是否递归查找子目录")
	flag.Parse()

	// 打开输出文件
	outFile, err := os.Create(*targetFile)
	if err != nil {
		fmt.Printf("无法创建输出文件: %v\n", err)
		os.Exit(1)
	}
	defer outFile.Close()

	// 存储所有找到的md文件路径
	var mdFiles []string

	// 遍历目录查找md文件
	err = filepath.Walk(*sourceDir, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		// 如果是文件且扩展名是.md
		if !info.IsDir() && filepath.Ext(path) == ".md" {
			mdFiles = append(mdFiles, path)
		}

		// 如果不是递归模式，跳过子目录
		if !*recursive && info.IsDir() && path != *sourceDir {
			return filepath.SkipDir
		}

		return nil
	})

	if err != nil {
		fmt.Printf("遍历目录时出错: %v\n", err)
		os.Exit(1)
	}

	// 对文件按路径排序，确保输出顺序稳定
	sort.Strings(mdFiles)

	// 处理每个md文件
	for i, filePath := range mdFiles {
		// 读取文件内容
		content, err := ioutil.ReadFile(filePath)
		if err != nil {
			fmt.Printf("读取文件 %s 时出错: %v\n", filePath, err)
			continue
		}

		// 添加文件分隔符和标题信息
		if i > 0 {
			outFile.WriteString("\n\n---\n\n")
		}
		outFile.WriteString(fmt.Sprintf("# 文件: %s\n\n", filePath))

		// 写入文件内容
		outFile.Write(content)

		fmt.Printf("已处理: %s\n", filePath)
	}

	fmt.Printf("合并完成! 共处理 %d 个md文件，结果已保存到 %s\n", len(mdFiles), *targetFile)
}
